今天我們將會講到:
Embedding 在介紹特徵組合的時候其實就有用到了,如下圖,那時候我們將兩個特徵組合後,最後壓縮到一個 2 維向量後輸出。
ML模型在學習的過程中,就會學習如何將高維度的資料”嵌入“至低維度向量當中,學習後的 Embedding 將可以某種程度地區分出資料的不同特性。
若考慮現實生活中的例子:電影的推薦,我們手上有每個消費者對他看過電影的評分,如下圖有100萬個消費者、50萬部電影。
根據不同的特徵,喜好電影種類的對應分佈也會不太一樣,例如說年紀、電影的銷量。
而使用 Embedding 的目的,就是將超高維度的消費者資料 (N-維),大幅地降低維度 (d-維),N >>> d。
以上面的例子來說,我們將其降低至2維,2個軸分別代表年紀和電影銷量(當然實際在學習 Embedding 時,每個軸代表的意思其實是不知道的),以此低維空間來表示全部消費者喜歡的電影分佈狀況。
當然你可能會疑惑說,為什麼我不直接使用N-維的特徵來做預測,反而要降低至d-維呢?原因是使用較低維度來預測有幾個優點:
那麼 Embedding 裡面的值是從哪得來的呢?答案是從大量的資料當中學出來的,如下圖,我們會先將資料轉換成一個稀疏的矩陣,然後丟進ML模型中,其中的嵌入層就會學到適當的數值。
而輸入資料的表示方式,會很大程度地影響學習時的運算速度,直觀上,我們會將消費者和電影,建立一個矩陣來表示有沒有看過 (one-hot encoding),不過這樣的表示方式過於密集(Dense),如下圖 (0,1,0,1,...,0,1),會拖累運算和儲存的效率:
但若是使用另外一種表示法,直接表示看過電影的索引位置,如下圖 (1, 3, 999999),這樣子的表示法將更有效率:
在ML模型中的嵌入層,其權重的學習是透過反向傳播(Back propagation),本質上和所謂的隱藏層是相同的意思,如下圖示,左邊藍色的輸入資料會先經過一個 3維的嵌入層,將高維的資料特徵降低維度:
這種從高維度的資料特徵降至低維的特徵,有人稱做潛在特徵(Latent features),可以看作是資料更為抽象的表徵:
然而降到d-維,這個 d 的數值該怎麼選擇呢?若 d 選得太高,當然模型可以較為精準,但是也提高過擬合的可能,同時也造成訓練速度變慢,經驗法則上,d 的選擇大約是輸入資料維度的 4 次方根。
今天介紹了嵌入,明天我們將介紹如何 “客製化Estimator”。